package com.kaizen.leet136;

/**
 * 最优解
 *
 * 作者：LeetCode
 * 链接：https://leetcode-cn.com/problems/single-number/solution/zhi-chu-xian-yi-ci-de-shu-zi-by-leetcode/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 * @author kaizen
 * @date 2020/5/8 17:04
 */
public class Solution {

    /**
     * 方法 4：位操作
     * 概念
     *
     * 如果我们对 0 和二进制位做 XOR 运算，得到的仍然是这个二进制位
     * a \oplus 0 = a
     * a⊕0=a
     *
     * 如果我们对相同的二进制位做 XOR 运算，返回的结果是 0
     * a \oplus a = 0
     * a⊕a=0
     *
     * XOR 满足交换律和结合律
     * a \oplus b \oplus a = (a \oplus a) \oplus b = 0 \oplus b = b
     * a⊕b⊕a=(a⊕a)⊕b=0⊕b=b
     *
     * 所以我们只需要将所有的数进行 XOR 操作，得到那个唯一的数字。
     *
     * @param nums
     * @return
     */
    public int singleNumber(int[] nums) {
        int a = 0;
        for (int i : nums) {
            a ^= i;
        }
        return a;
    }
}
